package com.ideaaedi.zoo.diy.artifact.generator.code.config;

import com.ideaaedi.zoo.diy.artifact.generator.code.enums.DefaultOutputEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import javax.annotation.Nonnull;

/**
 * 文件输出基础配置
 *
 * @author <font size = "20" color = "#3CAA3C"><a href="https://gitee.com/JustryDeng">JustryDeng</a></font> <img src="https://gitee.com/JustryDeng/shared-files/raw/master/JustryDeng/avatar.jpg" />
 * @since 1.0.7
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class DefaultBasicOutputConfig implements BasicOutputConfig {
    
    /**
     * 输出文件类型
     * <pre>
     *  自定义即可，示例{@link DefaultOutputConfig#outputType()}
     * </pre>
     */
    private String outputType;
    
    /**
     * 输出文件的文件后缀
     * <pre>
     * .java、.xml等，示例{@link DefaultOutputConfig#outputType()}
     * </pre>
     */
    private String outputSuffix;
    
    /**
     * 输出文件名（不带后缀）
     * <pre>
     * 自定义即可，示例{@link DefaultOutputConfig#outputName(String)}
     * </pre>
     */
    private String outputName;
    
    /**
     * 输出文件的相对包路径（相对于{@link PojoConfig#getPkgRoot()} ）
     * <pre>
     * 自定义即可，示例{@link DefaultOutputConfig#relativePkg()}
     * </pre>
     */
    private String relativePkg;
    
    public static DefaultBasicOutputConfig create(DefaultOutputEnum defaultOutputEnum) {
        DefaultBasicOutputConfig curr = new DefaultBasicOutputConfig();
        curr.setOutputType(defaultOutputEnum.getOutputType());
        curr.setOutputSuffix(defaultOutputEnum.getOutputSuffix());
        curr.setOutputName(defaultOutputEnum.getOutputName());
        curr.setRelativePkg(defaultOutputEnum.getOutputName());
        return curr;
    }
    
    @Override
    public String outputType() {
        return this.outputType;
    }
    
    @Override
    public String outputSuffix() {
        return this.outputSuffix;
    }
    
    @Override
    public String outputName(@Nonnull String pojoName) {
        return pojoName + this.outputName;
    }
    
    @Override
    public String relativePkg() {
        return this.relativePkg;
    }
}
